// uart3 PD8_TX PD9_RX

#include "cam.h"
extern UART_HandleTypeDef huart3; // 定义UART句柄
uint16_t x = 0; // x坐标
uint16_t y = 0; // y坐标
uint16_t blob_area = 0 ; // 色块面积
uint8_t is_findblob = 0; // 是否找到色块
uint8_t yolo_flag = 0; // 是否使用YOLO检测数字
cam_data_struct cam_data = {0};
//数字取值为1~9，建立哈希表
uint8_t hash_table[10] = {0};



// # 打包为字节并发送，包头0x02、包尾0xFF、换行
//         serial.write(struct.pack('B', 0x02))  # 包头
//         serial.write(struct.pack('B', x_high))
//         serial.write(struct.pack('B', x_low))
//         serial.write(struct.pack('B', y_high))
//         serial.write(struct.pack('B', y_low))
//         serial.write(struct.pack('B', 0xFF))  # 包尾
//         serial.write(struct.pack('B', ord('\n')))
void cal_cam_receive_data(uint8_t *data_buffer, cam_data_struct *cam_data)
{
    if (data_buffer[0] == 0x02 && data_buffer[9] == 0xFF) 
    {
        x = (data_buffer[1] << 8) | data_buffer[2]; // 高位在前
        y = (data_buffer[3] << 8) | data_buffer[4]; // 高位在前
        blob_area = (data_buffer[5] << 8) | data_buffer[6]; // 高位在前
        is_findblob = data_buffer[7]; // 是否找到色块
        if (data_buffer[8] != 0 && yolo_flag == 1) // YOLO检测数字
        {
            hash_table[data_buffer[8]] ++; // 将对应数字的哈希表值加1
            hash_table[0] ++;//用于计数到底收到了多少次数字
        }
    }
}

void cam_proc(void)
{
    HAL_UART_Transmit(&huart3, &yolo_flag, 1, HAL_MAX_DELAY);
}

